﻿using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SW_SoftBully.Controllers;
using SW_SoftBully.Models.ModuloServicios.MantenimientoCorrectivo;
using System.Data.SqlClient;
using log4net;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

namespace SW_SoftBully.Models.ModuloServicios.MantenimientoCorrectivo
{
    public class MantenimientoCorrectivoDAO
    {
        public string RegistrarMantenimientoCorrectivo(MantenimientoCorrectivoBean mantenimientocorrectivo)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                double tem_monto = (double)(mantenimientocorrectivo.Monto);
                int tem_mantenimiento = (int)mantenimientocorrectivo.ID_Mantenible;
                int tem_estado = 1;

                sqlCon.Open();
                
                string commandString2 = "INSERT INTO Mantenimiento_Correctivo (Fecha,Nombre,monto,lugar,id_edificio,id_mantenible,id_incidencia,id_tipomoneda,estado,observacion) " +
                                       " VALUES (convert(datetime,'" + mantenimientocorrectivo.Fecha + "',103), '" + mantenimientocorrectivo.Nombre + "','" + tem_monto + "','" + mantenimientocorrectivo.Lugar + "','" + mantenimientocorrectivo.ID_Edificio + "','" + mantenimientocorrectivo.ID_Mantenible + "','" + mantenimientocorrectivo.ID_Incidencia + "','" + mantenimientocorrectivo.ID_TipoMoneda + "','" + tem_estado + "','" + mantenimientocorrectivo.Observacion + "')";

                SqlCommand sqlCmd2 = new SqlCommand(commandString2, sqlCon);
                sqlCmd2.ExecuteNonQuery();

                sqlCon.Close();

                mantenimientocorrectivo.conexion = "Bien";
            }
            catch (Exception e)
            {
                String men = e.ToString();
                mantenimientocorrectivo.conexion = men;
            }


            return mantenimientocorrectivo.conexion;
        }

        public Boolean ExisteMantenimientoCorrectivo(MantenimientoCorrectivoBean mantenimientocorrectivo)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();
                //??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
                string commandString = "SELECT * FROM mantenimiento_correctivo WHERE nombre = '" + mantenimientocorrectivo.Nombre + "' AND estado = 1";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                if (dataReader.Read())
                {
                    MantenimientoCorrectivoBean MantenimientoCorrectivo = new MantenimientoCorrectivoBean();

                    MantenimientoCorrectivo.ID = (int)dataReader["id_mantenimiento_correctivo"];
                    MantenimientoCorrectivo.Nombre = (string)dataReader["Nombre"];

                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

        public List<MantenimientoCorrectivoBean> ListarMantenimientoCorrectivo(MantenimientoCorrectivoBean mantenimientocorrectivo)
        {
            try
            {
                List<MantenimientoCorrectivoBean> listamantenimientocorrectivo = new List<MantenimientoCorrectivoBean>();
                string tem_fechafin = "12/12/2200";
                string tem_fechainicio = "12/12/1900";
                double tem_montofin = 999999999;
                double tem_montoinicio = -1;

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();
                string commandString = "select  a.*, b.Nombre,c.Nombre,d.Nombre,e.Nombre,e.tasa_cambio,h.MontoSoles " +
                                       "commandString from mantenimiento_correctivo a inner join edificio b on (a.id_edificio=b.id_Edificio) " + 
                                       "inner join mantenible c on (a.id_mantenible=c.id_mantenible) inner join incidencia d on (a.id_incidencia=d.id_incidencia) "+
                                       "inner join tipo_moneda e on (a.id_tipomoneda=e.id_tipomoneda) inner join (select f.id_mantenimiento_correctivo,f.monto*g.tasa_cambio 'MontoSoles' "+
                                       "from mantenimiento_correctivo f inner join tipo_moneda g on f.id_tipomoneda=g.id_tipomoneda where f.estado=1) h on a.id_mantenimiento_correctivo=h.id_mantenimiento_correctivo "+
                                       "where a.estado=1";


                if (!string.IsNullOrEmpty(mantenimientocorrectivo.Nombre))
                {
                    commandString += " AND a.nombre LIKE '%" + mantenimientocorrectivo.Nombre + "%'";
                }

                if (mantenimientocorrectivo.ID_Mantenible > 0)
                {
                    commandString += " AND a.Id_mantenible = " + mantenimientocorrectivo.ID_Mantenible + "";
                }


                if (mantenimientocorrectivo.ID_Edificio > 0)
                {
                    commandString += " AND a.Id_edificio = " + mantenimientocorrectivo.ID_Edificio + "";
                }

                if (mantenimientocorrectivo.ID_Incidencia > 0)
                {
                    commandString += " AND a.Id_incidencia = " + mantenimientocorrectivo.ID_Incidencia + "";
                }


                if (mantenimientocorrectivo.ID_TipoMoneda > 0)
                {
                    commandString += " AND a.id_tipomoneda = " + mantenimientocorrectivo.ID_TipoMoneda + "";
                }

                if (!string.IsNullOrEmpty(mantenimientocorrectivo.Observacion))
                {
                    commandString += " AND a.observacion LIKE '%" + mantenimientocorrectivo.Observacion + "%'";
                }

                if (!string.IsNullOrEmpty(mantenimientocorrectivo.Lugar))
                {
                    commandString += " AND a.lugar LIKE '%" + mantenimientocorrectivo.Lugar + "%'";
                }
                

                if ((!string.IsNullOrEmpty(mantenimientocorrectivo.FechaInicio)) && (!string.IsNullOrEmpty(mantenimientocorrectivo.FechaFin)))
                {
                    commandString += " AND a.fecha BETWEEN convert(datetime,'" + mantenimientocorrectivo.FechaInicio + "',103)"
                                   + " AND convert(datetime,'" + mantenimientocorrectivo.FechaFin + "',103)";
                }
                else if (!string.IsNullOrEmpty(mantenimientocorrectivo.FechaInicio))
                {

                    commandString += " AND a.fecha BETWEEN convert(datetime,'" + mantenimientocorrectivo.FechaInicio + "',103)"
                                   + " AND convert(datetime,'" + tem_fechafin + "',103)";

                }
                else if (!string.IsNullOrEmpty(mantenimientocorrectivo.FechaFin))
                {

                    commandString += " AND a.fecha BETWEEN convert(datetime,'" + tem_fechainicio + "',103)"
                                   + " AND convert(datetime,'" + mantenimientocorrectivo.FechaFin + "',103)";

                }

                if ((mantenimientocorrectivo.MontoInicialTasaCambio > 0) || (mantenimientocorrectivo.MontoFinalTasaCambio > 0))
                {

                    if ((mantenimientocorrectivo.MontoInicial > 0) && (mantenimientocorrectivo.MontoFinal > 0))
                    {

                        commandString += " AND h.MontoSoles BETWEEN " + mantenimientocorrectivo.MontoInicial * mantenimientocorrectivo.MontoInicialTasaCambio + ""
                                       + " AND " + mantenimientocorrectivo.MontoFinal * mantenimientocorrectivo.MontoFinalTasaCambio + "";

                    }
                    else if (mantenimientocorrectivo.MontoInicial > 0)
                    {
                        commandString += " AND h.MontoSoles BETWEEN " + mantenimientocorrectivo.MontoInicial * mantenimientocorrectivo.MontoInicialTasaCambio + ""
                                       + " AND " + tem_montofin + "";

                    }
                    else if (mantenimientocorrectivo.MontoFinal > 0)
                    {

                        commandString += " AND h.MontoSoles BETWEEN " + tem_montoinicio + ""
                                       + " AND " + mantenimientocorrectivo.MontoFinal * mantenimientocorrectivo.MontoFinalTasaCambio + "";

                    }

                }
                else
                {
                    if ((mantenimientocorrectivo.MontoInicial > 0) && (mantenimientocorrectivo.MontoFinal > 0))
                    {

                        commandString += " AND a.monto BETWEEN " + mantenimientocorrectivo.MontoInicial  + ""
                                       + " AND " + mantenimientocorrectivo.MontoFinal  + "";

                    }
                    else if (mantenimientocorrectivo.MontoInicial > 0)
                    {
                        commandString += " AND a.monto BETWEEN " + mantenimientocorrectivo.MontoInicial  + ""
                                       + " AND " + tem_montofin + "";

                    }
                    else if (mantenimientocorrectivo.MontoFinal > 0)
                    {

                        commandString += " AND a.monto BETWEEN " + tem_montoinicio + ""
                                       + " AND " + mantenimientocorrectivo.MontoFinal + "";

                    }
                }

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    MantenimientoCorrectivoBean MantenimientoCorrectivo = new MantenimientoCorrectivoBean();
                    MantenimientoCorrectivo.ID = Convert.ToInt32(dataReader[2]);
                    MantenimientoCorrectivo.Fecha = String.Format("{0:dd/MM/yyyy}", dataReader[0]);
                    MantenimientoCorrectivo.Nombre = Convert.ToString(dataReader[6]);
                    MantenimientoCorrectivo.Monto = Convert.ToDouble(dataReader[5]);
                    MantenimientoCorrectivo.Observacion = Convert.ToString(dataReader[3]);
                    MantenimientoCorrectivo.Lugar = Convert.ToString(dataReader[8]);
                    MantenimientoCorrectivo.ID_TipoMoneda = Convert.ToInt32(dataReader[11]);
                    MantenimientoCorrectivo.ID_Incidencia = Convert.ToInt32(dataReader[7]);
                    MantenimientoCorrectivo.ID_Edificio = Convert.ToInt32(dataReader[9]);
                    MantenimientoCorrectivo.ID_Mantenible = Convert.ToInt32(dataReader[1]);
                    MantenimientoCorrectivo.Nombre_Edificio=Convert.ToString(dataReader[12]);
                    MantenimientoCorrectivo.Nombre_Incidencia=Convert.ToString(dataReader[14]);
                    MantenimientoCorrectivo.Nombre_Mantenible=Convert.ToString(dataReader[13]);
                    MantenimientoCorrectivo.Nombre_TipoMoneda=Convert.ToString(dataReader[15]);
                    MantenimientoCorrectivo.TasaCambio_TipoMoneda=Convert.ToDouble(dataReader[16]);

                    listamantenimientocorrectivo.Add(MantenimientoCorrectivo);

                }
                dataReader.Close();
                sqlCon.Close();


                return listamantenimientocorrectivo;
            }
            catch (Exception e)
            {
                String men = e.ToString();
                mantenimientocorrectivo.conexion = men;
                return null;
            }


        }

        public string ModificarMantenimientoCorrectivo(MantenimientoCorrectivoBean mantenimientocorrectivo)//////////////////////////////////////////////////////////////////////////////
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                double tem_monto = (double)mantenimientocorrectivo.Monto;
                int tem_estado = 1;

                string commandString = "UPDATE Mantenimiento_Correctivo SET " +
                                       "Fecha = '" + mantenimientocorrectivo.Fecha + "' , " +
                                       "observacion = '" + mantenimientocorrectivo.Observacion + "' , " +
                                       "lugar = '" + mantenimientocorrectivo.Lugar + "' , " +
                                       "id_tipomoneda = '" + mantenimientocorrectivo.ID_TipoMoneda + "' , " +
                                       "monto = '" + mantenimientocorrectivo.Monto + "' , " +
                                       "estado = '" + tem_estado + "'" +
                                       "WHERE Nombre = '" + mantenimientocorrectivo.Nombre + "'";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                mantenimientocorrectivo.conexion = "Bien";

            }
            catch (Exception e)
            {
                String men = e.ToString();
                mantenimientocorrectivo.conexion = men;
            }
            return mantenimientocorrectivo.conexion;
        }

        public string EliminarMantenimientoCorrectivo(MantenimientoCorrectivoBean mantenimientocorrectivo)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                int elim_estado = 0;

                string commandString = "UPDATE Mantenimiento_Correctivo SET " +
                                       "estado = '" + elim_estado + "'" +
                                       "WHERE Nombre = '" + mantenimientocorrectivo.Nombre + "'";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                mantenimientocorrectivo.conexion = "Bien";
            }
            catch (Exception e)
            {
                String men = e.ToString();
                mantenimientocorrectivo.conexion = men;
            }
            return mantenimientocorrectivo.conexion;
        }

    }
}